package top.kaoshanji.p2ch10b;

/**
 * 代码清单-p2ch10b-243页a：将一个具体类与几个接口相结合来生成一个新类
 * author kaoshanji
 * ^_^
 * create time 2025/3/11 9:47
 */
public class Adventure {

    // 每个方法的参数都是一个接口或者类
    // 它们都能接受 Hero 对象

    public static void t(CanFight x) {
        x.fight();
    }

    public static void u(CanSwim x) { x.swim(); }

    public static void v(CanFly x) { x.fly(); }

    public static void w(ActionCharacter x) { x.fight(); }

    public static void main(String[] args) {

        Hero h = new Hero();
        t(h); // 当做一个 CanFight
        u(h); // 当做一个 CanSwim
        v(h); // 当做一个 CanFly
        w(h); // 当做一个 ActionCharacter

    }

}

// 一种能力：能够战斗
interface CanFight {
    void fight();
}

// 又一种能力：能够游泳
interface CanSwim {
    void swim();
}

// 又一种能力：能够飞翔
interface CanFly {
    void fly();
}

// 一种事物：动作的角色
class ActionCharacter {
    public void fight() {}
}

// 主角
// 将上述接口和类整合起来，就具备上面各种能力和事物元素，这很单一原则，而且还可以根据需要进行各种整合。想到了Spring DI容器里为何定义那么多接口
class Hero extends ActionCharacter implements CanFight, CanSwim, CanFly {

    @Override
    public void swim() {

    }

    @Override
    public void fly() {

    }
}

